package org.example.mall.admin.service.manage;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.example.mall.admin.model.dto.manage.AccountDto;
import org.example.mall.admin.model.entity.manage.Account;
import org.example.mall.admin.model.vo.manage.AccountVo;

import java.util.Map;

/**
 * <p>
 * 用户信息 服务类
 * </p>
 *
 * @author hzq
 * @since 2021-12-29
 */
public interface AccountService extends IService<Account> {

    /**
     * @return 用户信息
     */
    Map<String, Object> info();

    /**
     * @return 用户基本信息
     */
    Map<String, Object> baseInfo();

    /**
     * 删除用户所在部门
     *
     * @param deptId 部门id
     */
    void setDeptIsNull(Integer deptId);

    /**
     * 分页查询用户信息
     *
     * @param page    分页参数
     * @param account 查询参数
     * @return 用户列表
     */
    IPage<AccountVo> getPage(Page page, Account account);

    /**
     * 根据手机号查询用户信息
     *
     * @param phone 手机号码
     * @return 用户信息
     */
    Account getByPhone(String phone);

    /**
     * 添加员工
     *
     * @param dto 员工信息
     * @return 结果
     */
    Boolean add(AccountDto dto);

    /**
     * 修改员工信息
     */
    Boolean edit(AccountDto dto);

    /**
     * 员工自己修改信息
     */
    Boolean selfEdit(Account account);

    /**
     * 删除员工
     *
     * @param accountId 员工id
     */
    Boolean del(Integer accountId);

    /**
     * 员工自己绑定邮箱
     *
     * @param email 邮箱
     * @param code  邮箱验证码
     */
    Boolean bindEmail(String email, String code);

    /**
     * 管理员修改员工邮箱
     *
     * @param accountId 员工id
     * @param email     邮箱
     */
    Boolean editEmail(Integer accountId, String email);

    /**
     * 员工自己绑定手机号
     *
     * @param phone 手机号
     * @param code  手机验证码
     */
    Boolean bindPhone(String phone, String code);

    /**
     * 管理员修改员工手机号
     *
     * @param accountId 员工id
     * @param phone     手机号
     */
    Boolean editPhone(Integer accountId, String phone);

    /**
     * 员工自己或管理员设置该员工账号密码
     *
     * @param accountId 员工id
     * @param username  账号
     * @param password  密码
     */
    Boolean editUsernamePassword(Integer accountId, String username, String password);

    /**
     * 设置账号密码
     * 账号密码皆为手机号
     */
    Boolean setUsernamePassword(Account account, String username, String password);

    /**
     * 员工自己修改密码
     *
     * @param accountId      员工id
     * @param originPassword 原密码
     * @param newPassword    新密码
     */
    Boolean editPassword(Integer accountId, String originPassword, String newPassword);

}
